package com.xiaoyu.sort.basic;

import java.sql.Timestamp;
import java.util.Arrays;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.TimeUnit;

/**
 * @program: DS_and_A
 * @description: 冒泡排序
 * @author: YuWenYi
 * @create: 2021-04-28 14:39
 **/
public class BubbleSort {

    //int[] 是引用类型,不需要返回值就能改变数组的内容
    public static void bubbleSort(int[] arr){
        int temp;
        boolean stopFlag;  //如果在某一趟,发现根本就没有发生元素的交换,那么就可以中断排序直接结束
        for (int i = 0; i < arr.length - 1; i++) {    //外围循环控制次数
            stopFlag = true;
            for (int j = 0; j < arr.length - i - 1; j++) {   //内层循环每次将一个最大值排到最后
                if (arr[j] > arr[j+1]) {
                    temp = arr[j+1];
                    arr[j+1] = arr[j];
                    arr[j] = temp;
                    stopFlag = false;   //如果交换过,就不停止循环
                }
            }
            //System.out.println(i);
            if (stopFlag){
                break;
            }
        }
    }

    public static void main(String[] args) {
        int[] arr = new int[]{-9,2,7,4,6,20,8,16,5,4,5};
        int[] nums = new int[]{0,1,4,2,3,4};


        int[] bigData = new int[80000];
        for (int i = 0; i < 80000; i++) {
            bigData[i] = (int)(Math.random() * 80000);
        }
        long start = System.currentTimeMillis();
        bubbleSort(bigData);
        long stop = System.currentTimeMillis();

        System.out.println((stop-start)/1000.0); //10秒以上,在进行大量数据排序的时候,速率较慢

        //System.out.println(Arrays.toString(bigData));
    }
}
